<?php
namespace app\jobs;

use app\service\PyService;
use think\facade\Log;
use think\queue\Job;

class XinJob
{
    /**
     * 任务执行方法
     * @param Job $job 任务对象
     * @param array $data 任务数据
     */
    public function fire(Job $job, array $data)
    {
        //命令行执行 php think queue:listen
        //命令行执行 php think queue:work
        //php think queue:work --once
        // 任务逻辑
        try {
            Log::channel('wx')->info("开始处理任务，任务数据：". json_encode($data). "\n");

            // 模拟任务处理
            $ok = (new PyService())->uploadOss($data['url'],$data['media_type'],$data['key']);
            Log::channel('wx')->info("异步任务处理结果".json_encode($ok));

            // 任务完成
            echo "任务处理完成\n";
            Log::channel('wx')->info("异步任务处理完成ok".json_encode($data));
            // 删除任务
            $job->delete();
        }catch (\Exception $e) {
            // 记录失败日志
            Log::channel('wx')->info("异步任务处理失败".$e->getMessage());

            // 尝试3次后放弃
            if ($job->attempts() > 3) {
                $job->delete();
            } else {
                $job->release(60); // 延迟60秒后重试
            }
        }

    }
}